<?php
abstract class Application_Model_Factory_MapperAbstract 
{
	/**
	 * Factory instance assigned to the AbstractFactory class.
	 * @var Application_Model_Factory_FactoryInterface
	 */
	protected static $_instance;	
	/**
	 * Assign the Factory instances used for this factory.
	 * @param Application_Model_Factory_FactoryInterface $factory
	 */
	public static function setFactory (Application_Model_Factory_FactoryInterface $factory) {
		self::$_instance = $factory;
	}
	/**
	 * Retreive the assigned Factory instance assigned through setFactory().
	 * @return Application_Model_Factory_FactoryInterface
	 */
	public static function getFactory ()
	{
		if (! self::$_instance instanceof Application_Model_Factory_FactoryInterface) {
			throw new Application_Model_Factory_FactoryException(
				__METHOD__ . ': please supply a factory before requesting it.'
			);
		}
		return self::$_instance;
	}	
	abstract public function getBranches();
	abstract public function getBusinesses();
	abstract public function getDepartments();
	abstract public function getEmployees();
	abstract public function getGroups();
	abstract public function getOrganizations();
}
